define(['mbmaputils', 'mbMarkerUtils', 'mbPolylineUtils'], function (mbmaputils, mbMarkerUtils, mbPolylineUtils) {

    return function initMapBox(callback) {

        // var gcjCenter = [119.85037042451472, 28.071348982692697];
        // var gcjCenter = {lng: 119.83306078429723, lat: 28.1466918390919}; // 浙江
        // var gcjCenter = [-112.6285, 36.4075]; // 科罗拉多大裂谷
        var gcjCenter = [102.911008, 34.986354]; // 甘南藏族自治州


        // var cdata= [
        //     {
        //         "location": "瑞金",
        //         "longitude": "116.02709",
        //         "latitude": "25.88562"
        //     },
        //     {
        //         "location": "遵义",
        //         "longitude": "106.82922",
        //         "latitude": "27.53625"
        //     },
        //     {
        //         "location": "胶平渡",
        //         "longitude": "102.451973",
        //         "latitude": "26.12466"
        //     },
        //     {
        //         "location": "安顺",
        //         "longitude": "106.2553",
        //         "latitude": "26.40574"
        //     },
        //     {
        //         "location": "泸定桥",
        //         "longitude": "102.233223",
        //         "latitude": "29.912481"
        //     },
        //     {
        //         "location": "雪山",
        //         "longitude": "102.813377",
        //         "latitude": "30.369026"
        //     },
        //     {
        //         "location": "草地",
        //         "longitude": "102.221375",
        //         "latitude": "31.899792"
        //     },
        //     {
        //         "location": "毛儿盖",
        //         "longitude": "103.599174",
        //         "latitude": "32.638378"
        //     },
        //     {
        //         "location": "静宁",
        //         "longitude": "105.73349",
        //         "latitude": "35.525242"
        //     },
        //     {
        //         "location": "吴起镇",
        //         "longitude": "108.176979",
        //         "latitude": "36.92485"
        //     },
        //     {
        //         "location": "会宁",
        //         "longitude": "105.054337",
        //         "latitude": "35.692486"
        //     }
        // ]


        /*
         * Init MapBoxGL before anything else
         */
        if (window.mapboxgl) {
            // mapboxgl.accessToken = 'pk.eyJ1IjoiY2Nsb3ljIiwiYSI6ImNrOTN0ZjhsazA1d2szZXFiaXFjYjU5Nm4ifQ.TCyR82BPDQEITwL4rd2bHA';
            mapboxgl.accessToken = "pk.eyJ1IjoiY2Nsb3ljIiwiYSI6ImNrOTN0ZjhsazA1d2szZXFiaXFjYjU5Nm4ifQ.TCyR82BPDQEITwL4rd2bHA";


            var mapOpts = {
                // zoom: 14,
                zoom: 4,
                center: [120, 30],
                pitch: 60,
                antialias: true,
                jogEnable: false,
                viewMode: '3D',
                maxPitch: 60,
            };

            // mapOpts.style = 'mapbox://styles/mapbox/streets-v11'; // stylesheet location
            mapOpts.style = 'mapbox://styles/ccloyc/ckhx8zcox0m5219mo2o5i7iky'; // stylesheet location
            mapOpts.style = 'mapbox://styles/mapbox/satellite-v9';

            // TODO: custom source and layer

            // mapOpts.trackResize = false;
            mapOpts.center = gcjCenter;
            mapOpts.container = 'mapbox-container';

            var bmap = window.bmap = new mapboxgl.Map(mapOpts);

            bmap.on('load', function () {
                bmap.resize();
                bmap.resize();
                // if (bmap.getLayer('satellite')) {
                //     bmap.setLayoutProperty('satellite', 'visibility', 'none');
                // }
            });

            // configuration of the custom layer for a 3D model per the CustomLayerInterface
            mbmaputils.defaultMBMapSetup(bmap, mapOpts, function (map, gl) {
                callback && callback(bmap, gl);

                /*
                 * 添加Marker样例
                 */

                // for (var i = 0; i < 10; i++) {
                //     for (var j = 0; j < 10; j++) {
                //         var loc = [gcjCenter[0] + 0.01 * i, gcjCenter[1] + 0.01 * j];

                //         // 带高度
                //         var marker = mbMarkerUtils.addOutdoorMarker(loc[0], loc[1], {
                //             map: bmap,
                //             normalImage: 'image/icon.png',
                //             selectedImage: 'image/icon.png',
                //             iconSize: 24,
                //             visible: true,
                //         });
                //         marker._id = i + ',' + j;
                //         marker.addToMap({map: bmap});
                //         marker.show();
                //         marker.setText(i + ',' + j);
                //         marker.on('click', function (e) {
                //             console.log(this._id);
                //         });
                //         console.log(marker);

                //         // 地图默认的调用方式，不带高度
                //         // var marker = new mapboxgl.Marker()
                //         //     .setLngLat(loc)
                //         //     .addTo(bmap);
                //     }
                // }

                window.drawRouteMap = function () {

                    var cdata = window.eventDetail
                    var route = [];
                    

                    for(var i = 0; i < cdata.length; i++) {
                        var loc = [cdata[i].longitude, cdata[i].latitude];

                            // if (route.length < 10) {
                                route.push(loc);
                            // }

                            // 带高度
                            var marker = mbMarkerUtils.addOutdoorMarker(loc[0], loc[1], {
                                map: bmap,
                                normalImage: 'image/icon.png',
                                selectedImage: 'image/icon.png',
                                iconSize: 24,
                                visible: true,
                                isShowingElevation: function () {
                                    return false;
                                }
                            });
                            marker._id = i;
                            marker.addToMap({map: bmap});
                            marker.show();
                            marker.setText(cdata[i].location);
                            marker.on('click', function (e) {
                                console.log(this._id);

                                $("#myModalId").click();
                                $("#myModalLabel").text(cdata[this._id].location);
                                $("#myModalContent").text(cdata[this._id].info);

                            });
                            // console.log(marker);

                            // 地图默认的调用方式，不带高度
                            // var marker = new mapboxgl.Marker()
                            //     .setLngLat(loc)
                            //     .addTo(bmap);

                            window.allMarkers.push(marker)

                    }

                    var poly = mbPolylineUtils.addOutdoorPolyline(route, {
                        strokeColor: '#00CCCC',     //线颜色
                        strokeOpacity: 1,       //线透明度
                        strokeWeight: 5,        //线宽
                        // strokeStyle: "dashed",   //线样式
                        strokeDasharray: [10, 5] //补充线样式
                    });
                    console.log(poly);
                    poly.addToMap({map: bmap});
                    poly.show();

                    var idx = 0;
                    window.the_interval = setInterval(function () {
                        idx++;
                        idx = idx % (route.length + 1);
                        var line = [].concat(route).splice(0, idx);
                        console.log('line', idx, route.length, line)
                        poly.setPath(line);
                    }, 400);

                    window.allPolys.push(poly)

                }

                


            }, function () {
                return null;
            });
        }
    };
});


